package br.com.puc.repositories;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.caelum.vraptor.ioc.Component;
import br.com.puc.models.Colaborador;
import br.com.puc.models.Orientacao;
import br.com.puc.models.ProducaoAcademica;
import br.com.puc.models.Projeto;
import br.com.puc.models.Publicacao;
import br.com.puc.models.enums.StatusProjeto;

@Component
public class ProducaoAcademicaRepositoryImpl implements ProducaoAcademicaRepository {

	private HibernateUtil hibernateUtil;

	protected ProducaoAcademicaRepositoryImpl(Session session) {
		 this.hibernateUtil = new HibernateUtil(session);
	}
	
	public ProducaoAcademica geraRelatorioResumido() {
		long colaboradores = hibernateUtil.getQuantidadeRegistros(Colaborador.class);
		long projetosEmElaboracao = hibernateUtil.getQuantidadeRegistros(Projeto.class, Restrictions.eq("status", StatusProjeto.EM_ELABORACAO));
		long projetosEmAndamento = hibernateUtil.getQuantidadeRegistros(Projeto.class, Restrictions.eq("status", StatusProjeto.EM_ANDAMENTO));
		long projetosConcluidos = hibernateUtil.getQuantidadeRegistros(Projeto.class, Restrictions.eq("status", StatusProjeto.CONCLUIDO));
		long publicacoes = hibernateUtil.getQuantidadeRegistros(Publicacao.class);
		long orientacoes = hibernateUtil.getQuantidadeRegistros(Orientacao.class);
		
		return new ProducaoAcademica(colaboradores, projetosEmElaboracao, projetosEmAndamento, projetosConcluidos, publicacoes, orientacoes);
	}
}
